package br.feevale.ihc

import org.hibernate.FetchMode;

import grails.plugins.springsecurity.SpringSecurityService;
import groovy.lang.Closure;
import br.com.insoft4.ext.rest.AbstractCrudService;
import br.com.insoft4.extjs.rest.AbstractCrudController;
import br.com.insoft4.framework.Usuario;
import br.com.insoft4.insoftextui.export.CSVFileHelperIntf;

class AtividadeColaboradorController extends AbstractCrudController<AtividadeColaborador> {
	
	AtividadeColaboradorService atividadeColaboradorService
	SpringSecurityService springSecurityService
	def csvFileHelper
	
	@Override
	protected AbstractCrudService<AtividadeColaborador> getCrudService() {
		return atividadeColaboradorService
	}

	@Override
	protected CSVFileHelperIntf getCsvHelper() {
		return csvFileHelper
	}
	
	@Override
	protected Closure getDefaultWhere() {
		println "PARMAS - where"
		println params
		
		return {
			if (colaboradorPossuiUsuario()) {
				colaborador {
					eq("usuario", springSecurityService.currentUser)
				}
			}
			
			if (params.filtroAtividade) {
				println "filtro atividade"
				atividade {
					ilike("descricao", "%${params.filtroAtividade}%")
				}
			}
			
			if (params.filtroColaborador) {
				println "filtro colaborador"
				colaborador {
					ilike("nome", "%${params.filtroColaborador}%")
				}
			}
			
			fetchMode("atividade", FetchMode.JOIN)
			fetchMode("colaborador", FetchMode.JOIN)
			fetchMode("atividade.projeto", FetchMode.JOIN)
			fetchMode("colaborador.usuario", FetchMode.JOIN)
		}
	}
	
	private boolean colaboradorPossuiUsuario() {
		Colaborador colaborador = Colaborador.findByUsuario(springSecurityService.currentUser)
		return colaborador != null
	}
	
	def gen() {
		String codPrograma = "IHC003"
		String namespace = "IHC"
		String dir = "E:/grails/projetos/feevale/ihc-analise-produtividade/web-app/app/app/"

		StringBuilder content = new StringBuilder()

//		def domainClass = grailsApplication.getDomainClass(Colaborador.class.name)
//		content << gen.model(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
//		content << gen.store(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
//
//		content << gen.gridView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, isDetail: false, isMaster: true, diretorio: dir)
//		content << gen.formView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, isDetail: false, isMaster: true, diretorio: dir)
//		content << gen.listController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, isDetail: false, isMaster: true, detailFilterName: 'colaboradorFilter', diretorio: dir)
//		content << gen.formController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, isDetail: false, isMaster: true, diretorio: dir)

		def domainClass = grailsApplication.getDomainClass(AtividadeColaborador.class.name)

		content << gen.model(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
		content << gen.store(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
		content << gen.gridView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
		content << gen.formView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
		content << gen.listController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)
		content << gen.formController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, diretorio: dir)

		render text: content.toString(), contentType: 'text/plain'
	}
	
}
